package com.ae.api;

import com.ae.base.block.PlacedItemTile;
import com.mojang.blaze3d.matrix.MatrixStack;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.shapes.VoxelShape;

import javax.annotation.Nonnull;
import java.util.HashMap;
import java.util.Map;

public interface IPlaced {
    /**
     * @return 模型id
     */
    String getId();

    /**
     * @param count 方块内存储的物品数量
     * @return 对应物品数量下的碰撞箱
     */
    VoxelShape getShape(int count);

    /**
     * 方块具体渲染方法
     * 实现该方法来渲染方块TER
     */
    default void render(int color, @Nonnull PlacedItemTile tile, float partialTicks, @Nonnull MatrixStack matrixStack, @Nonnull IRenderTypeBuffer bufferIn, int combinedLightIn, int combinedOverlayIn) {
    }

    /**
     * 方块实体会存储该颜色值，并在render方法中作为参数传入
     * 该方法仅在方块被创建时调用一次，用于检测物品是否按照该模型渲染
     * @param stack 被放入的物品
     * @return 物品对应颜色，若物品不属于该模型返回 -1
     */
    default int getColor(ItemStack stack) {
        return -1;
    }

    /**
     * 为方块添加自定义模型
     * key通过 block.get
     */
    default Map<ResourceLocation, IBakedModel> modelBake() {
        return new HashMap<>();
    }
}
